package cn.tedu.icop.finance.pojo;


import io.swagger.models.auth.In;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

import java.math.BigDecimal;

/**
 * 充电进度数据
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ChargingData {

    /**
     * 订单号
     */
    String orderNo;

    /**
     * 枪id
     */
    Integer gunId;

    /**
     * 用户id
     */
    Integer userId;


    /**
     * 充电开始时间
     * 可以使用订单创建的时间
     * 设备第一次同步数据的时间
     */
    Long startTime;


    /**
     * 同步次数
     */
    Integer count;

    /**
     * 充电度数
     */
    Float chargingCapacity;

    /**
     * 花费
     */
    BigDecimal totalCost;


    public void setChargingCapacity(Float chargingCapacity) {
        this.chargingCapacity = chargingCapacity;
    }

    /**
     * 通过充血模型 计算总花费,
     * 好处是 把计算价格的业务逻辑内聚到 ChargingData,进行解耦
     * 适合于复杂的业务场景
     * //上次花费
     * BigDecimal lastTotalCost = chargingData.getTotalCost();
     * //当前总花费  = 上次花费 + 本次花费
     * BigDecimal totalCost  = lastTotalCost.add(currentCost);
     * @param totalCost
     */
    public void setTotalCost(BigDecimal totalCost) {
        if (isFirst()){
            this.totalCost = totalCost;
        }else {
            this.totalCost = this.totalCost.add(totalCost);
        }
    }

    /**
     * 是否是第一次
     * 充血模型 在数据类里加了业务方法
     * 贫血模型
     * DDD 领域驱动开发
     * @return
     */
    public Boolean isFirst(){
        return this.count == 1;
    }
}
